package com.estagio.bean;

import java.util.Date;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.context.RequestContext;

import com.estagio.entity.Aluno;
import com.estagio.entity.Anamnese;
import com.estagio.entity.Cargo;
import com.estagio.entity.Funcionario;
import com.estagio.session.AlunoSession;
import com.estagio.session.AnamneseSession;
import com.estagio.session.FuncionarioSession;

@ManagedBean(name="anamneseBean")
@SessionScoped
public class AnamneseBean {
	
	private Anamnese anamnese = new Anamnese();
	private DataModel dmAnamnese;
	private String mensagem;
	private String condicionamento;
	private Integer fumante;
	private Integer bebida;
	
	private Integer rbFumante;
	private Integer rbBebida;
	private Integer rbCondicionamento;

	
	//PROFESSOR/FUNCIONARIO
	private Funcionario professor = new Funcionario();
	private DataModel dmProfessor;
	
	//ALUNO
	private Aluno aluno = new Aluno();
	private DataModel dmAluno;
	
	
	public DataModel getDmAnamnese() {
		return dmAnamnese;
	}

	public void setDmAnamnese(DataModel dmAnamnese) {
		this.dmAnamnese = dmAnamnese;
	}

	public Integer getRbFumante() {
		return rbFumante;
	}

	public void setRbFumante(Integer rbFumante) {
		this.rbFumante = rbFumante;
	}

	public Integer getRbBebida() {
		return rbBebida;
	}

	public void setRbBebida(Integer rbBebida) {
		this.rbBebida = rbBebida;
	}

	public Integer getRbCondicionamento() {
		return rbCondicionamento;
	}

	public void setRbCondicionamento(Integer rbCondicionamento) {
		this.rbCondicionamento = rbCondicionamento;
	}

	public DataModel getDmProfessor() {
		return dmProfessor;
	}

	public void setDmProfessor(DataModel dmProfessor) {
		this.dmProfessor = dmProfessor;
	}

	public Funcionario getProfessor() {
		return professor;
	}

	public void setProfessor(Funcionario professor) {
		this.professor = professor;
	}

	public Integer getBebida() {
		return bebida;
	}

	public void setBebida(Integer bebida) {
		this.bebida = bebida;
	}

	public Integer getFumante() {
		return fumante;
	}

	public void setFumante(Integer fumante) {
		this.fumante = fumante;
	}

	public AnamneseBean() {
		this.anamnese = new Anamnese();
	}
	
	public String getCondicionamento() {
		return condicionamento;
	}

	public void setCondicionamento(String condicionamento) {
		this.condicionamento = condicionamento;
	}



	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public Aluno getAluno() {
		return aluno;
	}

	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}

	public DataModel getDmAluno() {
		return dmAluno;
	}

	public void setDmAluno(DataModel dmAluno) {
		this.dmAluno = dmAluno;
	}

	public Anamnese getAnamnese() {
		return anamnese;
	}

	public void setAnamnese(Anamnese anamnese) {
		this.anamnese = anamnese;
	}


	//ANAMNESE
	public void saveEditAnamnese() {
		AnamneseSession anamneseRN = new AnamneseSession();
		Anamnese anamnese = this.anamnese;		
		this.mensagem = anamneseRN.save(anamnese);

		FacesMessage faces = new FacesMessage(mensagem);
		System.out.println(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);		
	}	

	public void saveAnamnese() {
		AnamneseSession anamneseRN = new AnamneseSession();
		Anamnese anamnese = this.anamnese;		
		
		if(this.rbCondicionamento == 1) {
			this.anamnese.setCondicionamento("Sedentario");
		} else if (this.rbCondicionamento == 2) {
			this.anamnese.setCondicionamento("Ativo");
		} else {
			this.anamnese.setCondicionamento("Atleta");
		}
		
		if(this.rbFumante == 1) {
			this.anamnese.setFumante("Sim");
		} else {
			this.anamnese.setFumante("Nao");
		}
		
		if(this.rbBebida == 1) {
			this.anamnese.setBebidaAlcoolica("Nao");
		} else if (this.rbBebida == 2){
			this.anamnese.setBebidaAlcoolica("Socialmente");
		} else {
			this.anamnese.setBebidaAlcoolica("Frequentemente");
		}
		this.mensagem = anamneseRN.save(anamnese);
		
		FacesMessage faces = new FacesMessage(this.mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);	
		RequestContext.getCurrentInstance().update("messages");
	}

	public String deleteAnamnese() {
		AnamneseSession anamneseRN = new AnamneseSession();		
		Anamnese anamnese = (Anamnese) this.dmAnamnese.getRowData();
		this.mensagem = anamneseRN.delete(anamnese);

		FacesMessage faces = new FacesMessage(mensagem);
		FacesContext contexto = FacesContext.getCurrentInstance();
		contexto.addMessage(null, faces);
		return "consultarAnamnese";
	}

	
	//ALUNO
	public DataModel findAluno() {
		AlunoSession session = new AlunoSession();
		List<Aluno> lista = session.find(this.aluno);
		this.dmAluno = new ListDataModel(lista);
		return this.dmAluno;
	}
		
	public void selectAluno() {
		this.anamnese.setAluno((Aluno) this.dmAluno.getRowData());
		RequestContext.getCurrentInstance().update("formManterAnamnese:pgAluno");
		RequestContext.getCurrentInstance().execute("dialogConsultarAluno.hide()");
	}
	
	//PROFESSOR
	public DataModel findFuncionario() {
		FuncionarioSession session = new FuncionarioSession();
		Cargo cargo = new Cargo();
		cargo.setIdCargo(1); //1 - Professor
		List<Funcionario> lista = session.find(this.professor, cargo);
		this.dmProfessor = new ListDataModel(lista);
		RequestContext.getCurrentInstance().update(":formDialogProfessor:dataTableAnamnese");
		return this.dmProfessor;
	}
		
	public void selectFuncionario() {
		this.anamnese.setFuncionario((Funcionario) this.dmProfessor.getRowData());
		RequestContext.getCurrentInstance().update("formManterAnamnese:pgFuncionario");
		RequestContext.getCurrentInstance().execute("dialogConsultarFuncionario.hide()");
	}
	
	public DataModel findAnamnese() {
		List<Anamnese> lista = (List<Anamnese>) new AnamneseSession().find(this.anamnese);
		this.dmAnamnese = new ListDataModel(lista);
		RequestContext.getCurrentInstance().update("formConsultarAnamnese:dataTableAnamnese");
		return this.dmAnamnese;
	}
	
	//METODOS DIALOGS
	public void addProfessor() {
		this.anamnese.setFuncionario((Funcionario) this.dmProfessor.getRowData());
		RequestContext.getCurrentInstance().update("formManterAnamnese:pgProfessor");
		RequestContext.getCurrentInstance().execute("dialogProfessor.hide()");
	}
	
	//INVOCAR TELAS
	public String newAnamnese() {
		this.anamnese = new Anamnese();
		this.anamnese.setDate(new Date());
		return "manterAnamnese";
	}
	
	public String consultarAnamnese() {
		this.anamnese = new Anamnese();
		this.anamnese.setAluno(new Aluno());
		this.anamnese.setFuncionario(new Funcionario());
		return "consultarAnamnese";
	}

	public String editarAnamnese() {
		this.anamnese = (Anamnese) this.dmAnamnese.getRowData();		
		return "editarAnamnese";
	}
	
	public String excluirAnamnese() {
		this.anamnese = (Anamnese) this.dmAnamnese.getRowData();
		return "excluirAnamnese";
	}
	
	
	public void clean() {
		this.anamnese = new Anamnese();
	}
	
	//OPEN DIALOGS
	public void openDialogProfessor() {
		RequestContext.getCurrentInstance().update("idDialogProfessor");
		RequestContext.getCurrentInstance().execute("dialogProfessor.show()");
	}
	
	public void openDialogConsultarAluno() {
		RequestContext.getCurrentInstance().update("idDialogConsultarAluno");
		RequestContext.getCurrentInstance().execute("dialogConsultarAluno.show()");
	}

}
